home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib10.dsk / ELECTRONIC MESSAGE CENTER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  12KB  |  214 lines

  1. 10  REM  **********************
  2. 20  REM  *        EMC         *
  3. 30  REM  * BY RUDY A. GUY     *
  4. 40  REM  * COPYRIGHT (C) 1982 *
  5. 50  REM  * BY MICRO-SPARC.INC *
  6. 60  REM  * LINCOLN, MA. 01773 *
  7. 70  REM  **********************
  8. 100  POKE 768,104: POKE 769,168: POKE 770,104: POKE 771,166: POKE 772,223: POKE 773,154: POKE 774,72: POKE 775,152: POKE 776,72: POKE 777,96
  9. 110  ONERR  GOTO 32000
  10. 120  DIM TI$(100),ME$(100),MD$(100)
  11. 130  TEXT : HOME : INVERSE : PRINT "+++++++": FOR I = 1 TO 22: PRINT "+     +": NEXT : PRINT "+++++++";: VTAB 1
  12. 140  VTAB 8: HTAB 2: PRINT "+++++": VTAB 10: HTAB 3: PRINT "EMC": VTAB 12: HTAB 3: PRINT "BY:": VTAB 14: HTAB 2: PRINT "R.GUY": VTAB 16: HTAB 2: PRINT "++++++"
  13. 150  VTAB 1: FOR I = 8 TO 40: HTAB I: PRINT "+";: NEXT 
  14. 160  FOR I = 2 TO 23: VTAB I: HTAB 40: PRINT "+";: NEXT 
  15. 170  VTAB 24: FOR I = 8 TO 39: HTAB I: PRINT "+";: NEXT 
  16. 180  POKE 2039,43
  17. 190  NORMAL : POKE 32,7: POKE 33,32: POKE 34,1: POKE 35,23: HOME 
  18. 200  VTAB 4:A$ = "<<MAIN MENU>>": GOSUB 11000: VTAB 22:A$ = "(C) 1982 MICRO-SPARC, INC.": GOSUB 11000: VTAB 5
  19. 210  RESTORE : FOR I = 1 TO 7: READ A$(I): PRINT :A$ = A$(I): GOSUB 11000: NEXT 
  20. 220  PRINT : PRINT " SELECT ONE OF THE ABOVE:";: GET A$: PRINT A$: IF A$ <"1"  OR A$ >"7"  THEN  HOME : GOTO 200
  21. 230 A =  VAL(A$): ON A GOSUB 1000,2000,3000,4000,5000,6000,7000
  22. 240  TEXT : HOME : CLEAR : GOTO 110
  23. 1000  REM  :::DISPLAY FILE:::
  24. 1010  HOME : VTAB 12: PRINT " FILE NAME :";: FOR I = 1 TO 10: PRINT  CHR$(95);: NEXT : PRINT : VTAB 12: HTAB 13: INPUT "";A$: IF A$ = ""  THEN  RETURN 
  25. 1020  IF  LEN(A$) >10  THEN 1000
  26. 1030  IF FL = 1  THEN FL = 0: GOTO 1050
  27. 1040  GOSUB 15000
  28. 1050  FOR I = 1 TO CZ -1: IF A$ = TI$(I)  THEN 1080
  29. 1060  NEXT : HOME : VTAB 12: PRINT " THAT FILE DOES NOT EXIST.": PRINT : PRINT " TRY AGAIN ";: INPUT YN$: IF  LEFT$(YN$,1) = "Y"  THEN FL = 1: GOTO 1010
  30. 1070  RETURN 
  31. 1080  GOSUB 9000
  32. 1090  POKE 35,21
  33. 1100  HOME : VTAB 22: INVERSE : PRINT "++++++++++++++++++++++++++++++++";: VTAB 23: PRINT "                                ";: SPEED= 140: NORMAL 
  34. 1110  POKE 232,3
  35. 1120  FOR I = 1 TO MC -1:A$ = ME$(I)
  36. 1130  INVERSE : VTAB 23: PRINT " ITEM # "I;: HTAB 16: PRINT "DATE :";: IF MD$(I) = ""  THEN  PRINT "       ";: GOTO 1160
  37. 1140  IF  LEN(MD$(I)) <8  THEN MD$(I) = " " +MD$(I): GOTO 1140
  38. 1150  HTAB 31 - LEN(MD$(I)): PRINT MD$(I);
  39. 1160  NORMAL 
  40. 1170 LM = 2:RM = 32
  41. 1180  FOR J = 0 TO 8: VTAB  PEEK(232) +J: HTAB 1: CALL  -868: FOR L = 1 TO 100: NEXT : NEXT : VTAB  PEEK(232)
  42. 1190  GOSUB 10000
  43. 1200  IF  PEEK(232) = 3  THEN  POKE 232,12: GOTO 1220
  44. 1210  IF  PEEK(232) = 12  THEN  POKE 232,3
  45. 1220  NEXT 
  46. 1230  FOR I = 1 TO 3000: NEXT 
  47. 1240  FOR I = 21 TO 2  STEP  -1: VTAB I: HTAB 1: CALL  -868: FOR J = 1 TO 100: NEXT : NEXT 
  48. 1250  GOTO 1100
  49. 2000  REM  :::ADD TO FILE:::
  50. 2010  HOME : VTAB 12: PRINT " FILE NAME :";: FOR I = 1 TO 10: PRINT  CHR$(95);: NEXT : PRINT : VTAB 12: HTAB 13: INPUT "";A$: IF A$ = ""  THEN  RETURN 
  51. 2020  IF  LEN(A$) >10  THEN 2000
  52. 2030  IF FL = 1  THEN FL = 0: GOTO 2050
  53. 2040  GOSUB 15000
  54. 2050  FOR I = 1 TO CZ -1: IF A$ = TI$(I)  THEN 2080
  55. 2060  NEXT : HOME : VTAB 12: PRINT " THAT FILE DOES NOT EXIST.": PRINT : PRINT " TRY AGAIN ";: INPUT YN$: IF  LEFT$(YN$,1) = "Y"  THEN FL = 1: GOTO 2000
  56. 2070  RETURN 
  57. 2080 AD = 1: HOME : GOSUB 3090
  58. 2090  PRINT : PRINT " IS THIS CORRECT ";: INPUT YN$: IF  LEFT$(YN$,1) = "N"  THEN 2080
  59. 2100  PRINT  CHR$(4);"APPEND "A$: PRINT  CHR$(4)"WRITE "A$: PRINT ME$(MC): PRINT MD$(MC): PRINT  CHR$(4)"CLOSE"
  60. 2110  PRINT : PRINT " ANOTHER ";: INPUT YN$: IF  LEFT$(YN$,1) = "N"  THEN AD = 0: RETURN 
  61. 2120  HOME : GOSUB 3090: GOTO 2090
  62. 3000  REM  :::ADD NEW FILE:::
  63. 3010  GOSUB 15000
  64. 3020  HOME 
  65. 3030  VTAB 3: PRINT " FILE NAME :";: FOR I = 1 TO 10: PRINT  CHR$(95);: NEXT : PRINT : VTAB 3: HTAB 13: INPUT "";TI$(CZ +1): IF  LEN(TI$(CZ +1)) >10  THEN  HOME : GOTO 3030
  66. 3040  IF TI$(CZ +1) = ""  THEN 3170
  67. 3050 MC = 1
  68. 3060  IF CZ = 0  THEN 3090
  69. 3070  FOR I = 1 TO CZ: IF TI$(CZ +1) = TI$(I)  THEN  HOME : VTAB 12:A$ = "THAT TITLE ALREADY EXISTS.": GOSUB 11000: FOR I = 1 TO 3000: NEXT : GOTO 3020
  70. 3080  NEXT 
  71. 3090  INVERSE : VTAB 5: HTAB 2: PRINT "ENTER MESSAGE :": NORMAL : PRINT : FOR I = 1 TO 224: PRINT  CHR$(95);: NEXT : PRINT : VTAB 7: HTAB 1: GOSUB 8000:ME$(MC) = ST$
  72. 3100  VTAB 15: PRINT " DATE (MM/DD/YY) :";: FOR I = 1 TO 8: PRINT  CHR$(95);: NEXT : PRINT : VTAB 15: HTAB 19: INPUT "";MD$(MC)
  73. 3120  IF AD = 1  THEN  RETURN 
  74. 3130  PRINT : INPUT " IS THIS CORRECT ?";YN$: IF  LEFT$(YN$,1) = "N"  THEN  HOME : GOTO 3090
  75. 3140  PRINT : PRINT " ANOTHER ?";: INPUT "";YN$: IF  LEFT$(YN$,1) = "Y"  THEN MC = MC +1: HOME : GOTO 3090
  76. 3150  PRINT  CHR$(4);"OPEN "TI$(CZ +1): PRINT  CHR$(4);"WRITE "TI$(CZ +1): FOR I = 1 TO MC: PRINT ME$(I): PRINT MD$(I): NEXT : PRINT  CHR$(4)"CLOSE"
  77. 3160  PRINT  CHR$(4);"OPEN TITLES": PRINT  CHR$(4);"POSITION TITLES,R"CZ -1: PRINT  CHR$(4);"WRITE TITLES": PRINT TI$(CZ +1): PRINT "***": PRINT  CHR$(4)"CLOSE"
  78. 3170  RETURN 
  79. 4000  REM  :::CHANGE A FILE:::
  80. 4010  HOME : VTAB 12: PRINT " FILE NAME :";: FOR I = 1 TO 10: PRINT  CHR$(95);: NEXT : PRINT : VTAB 12: HTAB 13: INPUT "";A$: IF A$ = ""  THEN  RETURN 
  81. 4020  IF  LEN(A$) >10  THEN 4010
  82. 4030  IF FL = 1  THEN FL = 0: GOTO 4060
  83. 4040  GOSUB 15000
  84. 4050 FI$ = A$
  85. 4060  FOR I = 1 TO CZ -1: IF A$ = TI$(I)  THEN 4090
  86. 4070  NEXT : HOME : VTAB 12: PRINT " THAT FILE DOES NOT EXIST.": PRINT : PRINT " TRY AGAIN ";: INPUT YN$: IF  LEFT$(YN$,1) = "Y"  THEN FL = 1: GOTO 4000
  87. 4080  RETURN 
  88. 4090  GOSUB 9000
  89. 4100  FOR I = 1 TO MC -1:A$ = ME$(I)
  90. 4110  HOME : VTAB 3: PRINT " ITEM #";I: PRINT :LM = 2:RM = 32: GOSUB 10000: PRINT : PRINT " DATE :"MD$(I)
  91. 4120  VTAB 17: PRINT " CHANGE :": PRINT " (D)ATE (M)ESSAGE (P)URGE": PRINT " (N)EXT": VTAB  PEEK(37) -2: HTAB 10: GET YN$: PRINT YN$
  92. 4130  IF YN$ = "N"  THEN 4180
  93. 4140 CH = 1
  94. 4150  IF YN$ = "D"  THEN 4260
  95. 4160  IF YN$ = "P"  THEN 4330
  96. 4170  IF YN$ = "M"  THEN 4290
  97. 4180  IF MC = 1  THEN 4210
  98. 4190  IF I > = MC -1  THEN 4210
  99. 4200  NEXT 
  100. 4210 A$ = FI$: IF CH = 0  THEN 4240
  101. 4220  PRINT  CHR$(4)"DELETE "A$: PRINT  CHR$(4)"OPEN "A$: PRINT  CHR$(4)"WRITE "A$
  102. 4230  FOR I = 1 TO MC -1: PRINT ME$(I): PRINT MD$(I): NEXT : PRINT  CHR$(4)"CLOSE"
  103. 4240  VTAB 15: CALL  -958: PRINT " CHANGE ANOTHER";: INPUT YN$: IF  LEFT$(YN$,1) = "Y"  THEN  HOME :CH = 0: GOTO 4000
  104. 4250  RETURN 
  105. 4260  VTAB 15: CALL  -958: PRINT " DATE (MM/DD/YY) :";: FOR J = 1 TO 8: PRINT  CHR$(95);: NEXT : VTAB 15: HTAB 19: INPUT "";MD$(I)
  106. 4270  IF  LEN(MD$(I)) >8  THEN  VTAB 7: CALL  -958: GOTO 4260
  107. 4280 A$ = ME$(I): GOTO 4110
  108. 4290  VTAB 13: CALL  -958: PRINT " MESSAGE :": VTAB 15: FOR J = 1 TO 224: PRINT  CHR$(95);: NEXT : VTAB 15: GOSUB 8000
  109. 4300  IF  LEN(ST$) = 1  THEN A$ = ME$(I): GOTO 4320
  110. 4310 ME$(I) = ST$:A$ = ST$
  111. 4320  GOTO 4110
  112. 4330  VTAB 17: CALL  -958: PRINT " ENTER 'DEL' TO CONFIRM :";: INPUT "";YN$: IF YN$ < >"DEL"  THEN 4110
  113. 4340  IF I = MC  THEN MC = MC -1: GOTO 4200
  114. 4350  FOR J = 1 TO MC -1
  115. 4360 ME$(J) = ME$(J +1):MD$(J) = MD$(J +1): NEXT 
  116. 4370 MC = MC -1
  117. 4380 A$ = ME$(I)
  118. 4390  IF I > = MC  THEN 4180
  119. 4400  GOTO 4110
  120. 5000  REM  :::DELETE FILE:::
  121. 5010  HOME : VTAB 12: PRINT " ENTER FILE TO BE DELETED :": PRINT : HTAB 10: FOR I = 1 TO 10: PRINT  CHR$(95);: NEXT : PRINT : VTAB 14: HTAB 10: INPUT "";A$
  122. 5020  IF A$ = ""  THEN  RETURN 
  123. 5030  IF  LEN(A$) >10  THEN 5010
  124. 5040  GOSUB 15000
  125. 5050  FOR I = 1 TO CZ -1: IF A$ = TI$(I)  THEN 5090
  126. 5060  NEXT 
  127. 5070  HOME : VTAB 12: PRINT " UNABLE TO MATCH THAT NAME.": PRINT : PRINT " TRY AGAIN ?";: INPUT "";YN$: IF  LEFT$(YN$,1) = "Y"  THEN 5000
  128. 5080  RETURN 
  129. 5090  PRINT : PRINT " ENTER 'DEL' TO DELETE FILE.": PRINT : HTAB 10: INPUT YN$: IF YN$ < >"DEL"  THEN  RETURN 
  130. 5100  HOME : VTAB 12: HTAB 5: INVERSE : PRINT "FILE BEING DELETED.": NORMAL 
  131. 5110  IF I = CZ -1  AND I = 1  THEN  PRINT  CHR$(4)"DELETE TITLES": PRINT  CHR$(4)"DELETE "A$: RETURN 
  132. 5120  FOR J = 1 TO CZ -1:TI$(J) = TI$(J +1): NEXT 
  133. 5130  PRINT  CHR$(4)"DELETE TITLES": PRINT  CHR$(4)"OPEN TITLES": PRINT  CHR$(4)"WRITE TITLES": FOR I = 1 TO CZ -1: PRINT TI$(I): NEXT : PRINT  CHR$(4)"CLOSE"
  134. 5140  PRINT  CHR$(4)"DELETE "A$
  135. 5150  PRINT : PRINT " FILE DELETED, DO ANOTHER ?";: INPUT "";YN$: IF  LEFT$(YN$,1) = "Y"  THEN 5000
  136. 5160  RETURN 
  137. 6000  REM  :::VIEW NAMES:::
  138. 6010  GOSUB 15000
  139. 6020 B = 1: HOME 
  140. 6030  FOR I = B TO CZ -1
  141. 6040  IF I <10  THEN  HTAB 2
  142. 6050  IF  PEEK(37) <22  THEN  PRINT I". "TI$(I): GOTO 6070
  143. 6060  GOTO 6090
  144. 6070  NEXT 
  145. 6080  GET A$: PRINT A$: RETURN 
  146. 6090 J = I:I = CZ -1: IF J = I  THEN 6150
  147. 6100  VTAB 2
  148. 6110  FOR I = J TO CZ -1
  149. 6120  HTAB 16: IF  PEEK(37) <22  THEN  PRINT I". "TI$(I): GOTO 6140
  150. 6130  GOTO 6150
  151. 6140  NEXT : HTAB 16: GET A$: PRINT A$: RETURN 
  152. 6150  HTAB 16: GET A$: PRINT A$
  153. 6160 B = I:I = CZ -1: IF B = I  THEN 6140
  154. 6170  HOME : GOTO 6030
  155. 7000  TEXT : HOME : END 
  156. 8000  REM  :::INPUT ROUTINE:::
  157. 8010 ST$ = "": CALL  -662
  158. 8020  FOR J = 512 TO 736:X =  PEEK(J)
  159. 8030  IF X = 141  THEN 8060
  160. 8040 ST$ = ST$ + CHR$(X -128)
  161. 8050  NEXT : IF  LEN(ST$) >224  THEN  PRINT : PRINT  CHR$(7)"TOO LONG!": FOR J = 1 TO 3000: NEXT : HOME : POP : GOTO 3070
  162. 8060  IF ST$ = ""  THEN  POP : HOME : GOTO 3070
  163. 8070  RETURN 
  164. 9000  REM  :::READ MESSAGES:::
  165. 9010 MC = 1
  166. 9020  PRINT  CHR$(4)"OPEN "A$: PRINT  CHR$(4)"READ "A$
  167. 9030 ST$ = ""
  168. 9040  CALL  -662
  169. 9050  FOR I = 512 TO 736:X =  PEEK(I): IF X = 141  THEN 9090
  170. 9060  IF X >141  THEN X = X -128
  171. 9070 ST$ = ST$ + CHR$(X)
  172. 9080  NEXT 
  173. 9090 ME$(MC) = ST$: INPUT MD$(MC):MC = MC +1
  174. 9100  GOTO 9030
  175. 9110  PRINT  CHR$(4)"CLOSE"
  176. 9120  RETURN 
  177. 10000  REM  :::::PRINT FORMATTER
  178. 10010  IF  LEN(A$) < = RM -LM  THEN  PRINT A$: RETURN 
  179. 10020  FOR J = RM -LM TO 1  STEP  -1
  180. 10030 C$ =  MID$ (A$,J,1): IF C$ = " "  OR C$ = "."  OR C$ = ","  OR C$ = "!"  OR C$ = "?"  OR C$ = "-"  THEN 10050
  181. 10040  NEXT :J = RM -LM
  182. 10050  IF C$ = " "  THEN A1$ =  LEFT$(A$,J -1):A$ =  RIGHT$(A$, LEN(A$) -J): GOTO 10090
  183. 10060  IF C$ = "!"  OR C$ = ","  OR C$ = "."  OR C$ = "?"  OR C$ = "-"  AND J = RM -LM  THEN  GOSUB 10130:A1$ =  LEFT$(A$,J):A$ =  RIGHT$(A$, LEN(A$) -J -1): HTAB LM: PRINT A1$: GOTO 10100
  184. 10070 A1$ =  LEFT$(A$,J): IF  LEN(A$) < > LEN(A1$)  THEN A$ =  RIGHT$(A$, LEN(A$) -J): GOTO 10090
  185. 10080  GOTO 10110
  186. 10090  HTAB LM: PRINT A1$
  187. 10100  IF  LEN(A$) >RM -LM  THEN 10020
  188. 10110  HTAB LM: PRINT A$
  189. 10120  RETURN 
  190. 10130  IF J =  LEN(A$)  THEN  RETURN 
  191. 10140  IF  MID$ (A$,J +1,1) < >" "  THEN A1$ =  LEFT$(A$,J):A$ =  RIGHT$(A$, LEN(A$) -J): HTAB LM: PRINT A1$;: POP : GOTO 10100
  192. 10150  RETURN 
  193. 11000  PRINT  TAB( ((32) - LEN(A$))/2)A$: RETURN 
  194. 12000  DATA  "1. LOAD & DISPLAY FILE","2. ADD TO A FILE      ","3. ADD A NEW FILE     ","4. CHANGE A FILE      ","5. DELETE A FILE      ","6. VIEW NAME-FILE     ","7. EXIT PROGRAM       "
  195. 15000  REM  :::READ TITLES FILE:::
  196. 15010 CZ = 1
  197. 15020  PRINT  CHR$(4)"OPEN TITLES": PRINT  CHR$(4)"READ TITLES"
  198. 15030  INPUT TI$(CZ): IF TI$(CZ) = "***"  THEN 15050
  199. 15040 CZ = CZ +1: GOTO 15030
  200. 15050  PRINT  CHR$(4)"CLOSE"
  201. 15060  RETURN 
  202. 32000  REM  :::ERROR ROUTINE:::
  203. 32010 ER =  PEEK(222):EL =  PEEK(218) + PEEK(219) *256
  204. 32020  CALL 768
  205. 32030  IF ER = 5  AND EL = 15030  AND A < >3  THEN  PRINT : PRINT  CHR$(4)"CLOSE": HOME : VTAB 12:A$ = "NO TITLES IN FILE.": GOSUB 11000: FOR I = 1 TO 4000: NEXT : POP : RETURN 
  206. 32040  IF ER = 5  AND EL = 15030  THEN  PRINT : PRINT  CHR$(4)"CLOSE":ER = 1: GOTO 15060
  207. 32050  IF ER = 5  AND EL = 9040  OR EL = 9100  THEN  PRINT : GOTO 9110
  208. 32060  IF ER = 22  AND EL >10000  THEN  RESUME 
  209. 32070  IF ER = 255  THEN  SPEED= 255: GOTO 130
  210. 32080  HOME 
  211. 32090  IF ER = 9  THEN  PRINT "DISK FULL!": END 
  212. 32100  IF ER = 10  THEN  PRINT "FILE IS LOCKED!": END 
  213. 32110  IF ER = 8  THEN  PRINT "DISK I/O ERROR!": END 
  214. 32120  IF ER = 4  THEN  PRINT "REMOVE WRITE PROTECT TAB!": END